﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FitnessClubManager.DAL;
using FitnessClubManager.BLL;
using FitnessClubManager.GUI.TacNghiep;
using System.IO;


namespace FitnessClubManager.GUI
{
    public partial class FormTacNghiep : FormBase
    {
        public void SetReadOnlyGrid()
        {
            gridLichSuGiaoDich_CheckCardTab.AllowUserToAddRows = false;
            gridLichSuGiaoDich_CheckCardTab.AllowUserToDeleteRows = false;
            gridLichSuGiaoDich_CheckCardTab.ReadOnly = true;
            gridLichSuGiaoDich_CheckCardTab.AutoGenerateColumns = false;

            gridSanPhamKhachMua_BanNuocTab.AllowUserToAddRows = false;
            gridSanPhamKhachMua_BanNuocTab.AllowUserToDeleteRows = false;
            gridSanPhamKhachMua_BanNuocTab.ReadOnly = true;
            gridSanPhamKhachMua_BanNuocTab.AutoGenerateColumns = false;

            gridSanPhamTrongNgay_BanNuocTab.AllowUserToAddRows = false;
            gridSanPhamTrongNgay_BanNuocTab.AllowUserToDeleteRows = false;
            gridSanPhamTrongNgay_BanNuocTab.ReadOnly = true;
            gridSanPhamTrongNgay_BanNuocTab.AutoGenerateColumns = false;

        }

        public FormTacNghiep()
        {
            InitializeComponent();
            btnCapNhat_CheckCardTab.Enabled = btnGiaHan_CheckCardTab.Enabled = btnDangKyTu_CheckCard.Enabled = false;
            SetReadOnlyGrid();
            LoadNuocGK();
            LoadDanhSachSanPhamTrongNgay(DateTime.Now);
        }

        void LoadNuocGK()
        {
            bdsNuocGiaiKhat.DataSource = BizNuocGiaiKhat.GetList();
            cmbSanPham_BanNuocTab.DataSource = bdsNuocGiaiKhat;
            cmbSanPham_BanNuocTab.DisplayMember = "TenNuocGK";
            cmbSanPham_BanNuocTab.ValueMember = "MaNuocGK";
        }

        void ResetDataKiemTraThe()
        {
            txtHo_CheckCardTab.Text =
                txtTen_CheckCardTab.Text =
                txtSoDienThoai_CheckCardTab.Text =
                txtDiaChi_CheckCardTab.Text =
                txtGhiChu_CheckCardTab.Text = "";
            bdsLichSuGiaoDich_CheckCardTab.DataSource = null;
        }

        KhachHang khachHang_CheckCardTab;
        LichSuGiaoDich lichSuGiaoDich_CheckCardTab;

        private void txtNhapMaThe_CheckCardTab_KeyPress(object sender, KeyPressEventArgs e)
        {
            errorInfo.Clear();
            if (e.KeyChar == 13)
            {
                #region Kiểm tra hợp lệ dữ liệu
                if (string.IsNullOrEmpty(txtNhapMaThe_CheckCardTab.Text))
                {
                    errorInfo.SetError(txtNhapMaThe_CheckCardTab, "Mã thẻ rỗng");
                    return;
                }
                //Kiểm tra xem thẻ có tồn tại hay không. Nếu có ai là chủ sỡ hữu
                lichSuGiaoDich_CheckCardTab = BizLichSuGiaoDich.GetOwnCard(txtNhapMaThe_CheckCardTab.Text);
                if (lichSuGiaoDich_CheckCardTab == null)
                {
                    errorInfo.SetError(txtNhapMaThe_CheckCardTab, "Thẻ này không tồn tại");
                    return;
                }
                //if (lichSuGiaoDich_CheckCardTab.DateTo < DateTime.Now.Date)
                //{
                //    MessageBox.Show("Thẻ đã hết hạn. Vui lòng gia hạn", "Thông báo",
                //        MessageBoxButtons.OK, MessageBoxIcon.Information);
                //    return;
                //}
                #endregion

                btnCapNhat_CheckCardTab.Enabled = btnGiaHan_CheckCardTab.Enabled = btnDangKyTu_CheckCard.Enabled = true;

                khachHang_CheckCardTab = lichSuGiaoDich_CheckCardTab.KhachHang;
                txtHo_CheckCardTab.Text = khachHang_CheckCardTab.Ho;
                txtTen_CheckCardTab.Text = khachHang_CheckCardTab.Ten;
                txtSoDienThoai_CheckCardTab.Text = khachHang_CheckCardTab.SoDienThoai;
                txtDiaChi_CheckCardTab.Text = khachHang_CheckCardTab.DiaChi;
                txtGhiChu_CheckCardTab.Text = khachHang_CheckCardTab.GhiChu;
                string filePath = Program.GetFilePathAvatar(khachHang_CheckCardTab.MaKhachHang);
                //Lấy lịch sử giao dịch của khách hàng này hiện lên grid
                bdsLichSuGiaoDich_CheckCardTab.DataSource = BizLichSuGiaoDich.GetHistory(khachHang_CheckCardTab.MaKhachHang);
                gridLichSuGiaoDich_CheckCardTab.DataSource = bdsLichSuGiaoDich_CheckCardTab;
            }
            else
            {
                btnCapNhat_CheckCardTab.Enabled = btnGiaHan_CheckCardTab.Enabled = btnDangKyTu_CheckCard.Enabled = false;
            }
        }



        private void picKhachHang_CheckCardTab_Click(object sender, EventArgs e)
        {
            //picKhachHang_CheckCardTab.Load(Program.filePathNoAvatar);
            //FormChupHinh frm = new FormChupHinh();
            //frm.ShowDialog();
            //if (File.Exists(Program.filePathAvatarTemp))
            //{
            //    Helper.SaveImageAvatar(Program.filePathAvatarTemp, khachHang_CheckCardTab.MaKhachHang);
            //    File.Delete(Program.filePathAvatarTemp);
            //    picKhachHang_CheckCardTab.Load(Program.GetFilePathAvatar(khachHang_CheckCardTab.MaKhachHang));
            //}
        }

        private void btnCapNhat_CheckCardTab_Click(object sender, EventArgs e)
        {
            if (khachHang_CheckCardTab != null)
            {
                khachHang_CheckCardTab.Ho = txtHo_CheckCardTab.Text;
                khachHang_CheckCardTab.Ten = txtTen_CheckCardTab.Text;
                khachHang_CheckCardTab.SoDienThoai = txtSoDienThoai_CheckCardTab.Text;
                khachHang_CheckCardTab.DiaChi = txtDiaChi_CheckCardTab.Text;
                khachHang_CheckCardTab.GhiChu = txtGhiChu_CheckCardTab.Text;
                if (BizKhachHang.Update(khachHang_CheckCardTab) != null)
                {

                    MessageBox.Show("Cập nhật thông tin khách hàng thành công", "Thông báo",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                    MessageBox.Show("Cập nhật thông tin khách hàng thất bại", "Thông báo",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnGiaHan_CheckCardTab_Click(object sender, EventArgs e)
        {
            FormGiaHan frm = new FormGiaHan(lichSuGiaoDich_CheckCardTab);
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtNhapMaThe_CheckCardTab_KeyPress(this, new KeyPressEventArgs((char)13));
            }
        }

        private void txtNhapMaThe_CheckCardTab_TextChanged(object sender, EventArgs e)
        {
            if (lichSuGiaoDich_CheckCardTab != null)
            {
                lichSuGiaoDich_CheckCardTab = null;
                ResetDataKiemTraThe();
            }
            if (btnDangKyTu_CheckCard.Enabled == true)
                btnGiaHan_CheckCardTab.Enabled = btnDangKyTu_CheckCard.Enabled = false;
        }

        private void btnDangKyTu_CheckCard_Click(object sender, EventArgs e)
        {
            FormGiaHan frm = new FormGiaHan(null, khachHang_CheckCardTab);
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtNhapMaThe_CheckCardTab_KeyPress(this, new KeyPressEventArgs((char)13));
            }
        }

        private void btnDangKyMoi_Click(object sender, EventArgs e)
        {
            FormDangKyThe frm = new FormDangKyThe();
            frm.ShowDialog();
        }

        private void bdsNuocGiaiKhat_CurrentChanged(object sender, EventArgs e)
        {
            NuocGiaiKhat nuoc = bdsNuocGiaiKhat.Current as NuocGiaiKhat;
            if (nuoc != null)
            {
                txtSoLuongKho.Text = nuoc.SoLuong.ToString();
                txtGia_BanNuocTab.Text = nuoc.GiaBan.ToString();
            }
        }

        private void btnNhap_BanNuocTab_Click(object sender, EventArgs e)
        {
            int temp;
            errorInfo.Clear();
            if (!int.TryParse(txtGia_BanNuocTab.Text, out temp))
            {
                errorInfo.SetError(txtGia_BanNuocTab, "Giá bán không chính xác");
                return;
            }
            NuocGiaiKhat nuoc = bdsNuocGiaiKhat.Current as NuocGiaiKhat;
            if (nuoc != null)
            {
                NuocGKForGrid nuocGK = new NuocGKForGrid
                {
                    DonGia = int.Parse(txtGia_BanNuocTab.Text),
                    MaNuocGK = nuoc.MaNuocGK,
                    SoLuong = (int)numSoLuong_BanNuocTab.Value,
                    TenNuocGK = nuoc.TenNuocGK,
                    GiaNhap = nuoc.GiaNhap
                };
                var lsNuocGKForGrid = bdsDonHang.DataSource as List<NuocGKForGrid>;
                if (lsNuocGKForGrid == null)
                {
                    lsNuocGKForGrid = new List<NuocGKForGrid>();
                    lsNuocGKForGrid.Add(nuocGK);
                }
                else
                {
                    bool isAdd = true;
                    var item = (from t in lsNuocGKForGrid
                                where t.MaNuocGK == nuocGK.MaNuocGK
                                select t).ToList();
                    if ((item == null) || (item.Count == 0))
                        lsNuocGKForGrid.Add(nuocGK);
                    else
                        for (int i = 0; i < item.Count; i++)
                            if (item[i].DonGia == nuocGK.DonGia)
                            {
                                isAdd = false;
                                item[i].SoLuong += nuocGK.SoLuong;
                                break;
                            }
                }
                bdsDonHang.DataSource = lsNuocGKForGrid;
                gridSanPhamKhachMua_BanNuocTab.DataSource = null;
                gridSanPhamKhachMua_BanNuocTab.DataSource = bdsDonHang;
                var total = (from t in lsNuocGKForGrid
                             select t.SoLuong * t.DonGia).Sum();
                lbTong_BanNuocTab.Text = "Tổng: " + total.ToString().FormatCurrency() + " đồng";
            }
        }

        private void btnSanPham_Delete_Click(object sender, EventArgs e)
        {
            var ls = bdsDonHang.DataSource as List<NuocGKForGrid>;
            if (ls != null && ls.Count > 0)
            {
                bdsDonHang.RemoveCurrent();
                if (ls.Count == 0)
                    bdsDonHang.DataSource = null;
            }
            else
                MessageBox.Show("Không thể xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void btnBan_BanNuocTab_Click(object sender, EventArgs e)
        {
            var ls = bdsDonHang.DataSource as List<NuocGKForGrid>;
            if (ls != null)
            {
                foreach (var item in ls)
                {
                    var info = BizNuocGiaiKhat.GetOne(item.MaNuocGK);
                    if (info == null)
                        throw new Exception("Sản phẩm " + item.TenNuocGK + " không tồn tại");
                    if (info.SoLuong < item.SoLuong)
                    {
                        MessageBox.Show("Sản phẩm " + item.TenNuocGK + " không đủ số lượng để bán. \n\rSố lượng còn lại: " + info.SoLuong, "Thông báo", MessageBoxButtons.OK);
                        return;
                    }
                    DongNuocGiaiKhat dongNuoc = new DongNuocGiaiKhat
                    {
                        MaNuocGK = item.MaNuocGK,
                        DonGia = item.DonGia,
                        GiaNhap = item.GiaNhap,
                        NgayBan = DateTime.Now,
                        SoLuong = item.SoLuong,
                        TenDangNhap = Program.NguoiSuDung.TenDangNhap
                    };
                    if (!BizDongNuocGK.Add(dongNuoc))
                    {
                        MessageBox.Show("Không thể thêm loại nước giải khát " + item.TenNuocGK, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                }
                if (ls.Count > 0)
                    LoadDanhSachSanPhamTrongNgay(DateTime.Now);
                bdsDonHang.DataSource = null;
                LoadNuocGK();
            }
        }

        void LoadDanhSachSanPhamTrongNgay(DateTime date)
        {
            var ls = BizDongNuocGK.GetListTrongNgay(date, Program.NguoiSuDung.TenDangNhap);
            if (ls != null && ls.Count > 0)
            {
                lbTongTienTrongNgay_BanNuocTab.Text = "Tổng: " + (from e in ls
                                                                  select e.SoLuong * e.DonGia).Sum().ToString().FormatCurrency() + " đồng";
                bdsSanPhamBanTrongNgay.DataSource = ls;
                gridSanPhamTrongNgay_BanNuocTab.DataSource = bdsSanPhamBanTrongNgay;
            }
            else
            {
                lbTongTienTrongNgay_BanNuocTab.Text = "Tổng tiền: 0 đồng";
                bdsSanPhamBanTrongNgay.DataSource = null;
                gridSanPhamTrongNgay_BanNuocTab.DataSource = bdsSanPhamBanTrongNgay;
            }
        }

        private void bdsDonHang_DataSourceChanged(object sender, EventArgs e)
        {
        }

        private void cmbSanPham_BanNuocTab_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }

}